package com.study.modules.hutoolStudy;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ZipUtil;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.AesKeyStrength;
import net.lingala.zip4j.model.enums.CompressionLevel;
import net.lingala.zip4j.model.enums.CompressionMethod;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import net.lingala.zip4j.util.UnzipUtil;

import java.io.File;
import java.nio.charset.StandardCharsets;

/**
 * hutool工具类中的压缩工具类
 */
public class HutoolZipUtilTest {

    // 压缩文件存放路径
    public static final String zipBasePath = "E:\\ITsoftware\\project\\study\\springboot-shiro\\zip\\";

    public static void main(String[] args) throws ZipException {
        //zipDir();
        zipFile();
    }

    /**
     * 压缩文件夹并解压
     */
    public static void zipDir() {
        String dirPath = "E:\\ITsoftware\\project\\study\\springboot-shiro\\src\\main\\resources";
        File zip = ZipUtil.zip(dirPath, zipBasePath + "dir\\" + "resources.zip");
        ZipUtil.unzip(zip);
    }

    /**
     * 压缩文件并解压
     */
    public static void zipFile() throws ZipException {
        String filePath = "E:\\ITsoftware\\project\\study\\springboot-shiro\\src\\main\\resources\\rebel.xml";
        String filePath1 = FileUtil.mainName(filePath) + ".zip";
        // 压缩文件
        File zipFile = ZipUtil.zip(filePath, zipBasePath + "file\\" + filePath1);
        // 解压到当前文件夹
        //ZipUtil.unzip(zipFile.getAbsoluteFile(), new File(zipBasePath + "file\\"));

        // 压缩包加密、解密
        String password = "123456";
        ZipParameters parameters = new ZipParameters();
        parameters.setCompressionMethod(CompressionMethod.DEFLATE); // 使用DEFLATE压缩方法
        parameters.setCompressionLevel(CompressionLevel.NORMAL); // 设置压缩级别
        parameters.setEncryptFiles(true); // 启用文件加密
        parameters.setEncryptionMethod(EncryptionMethod.AES);
        // 下面的行是可选的。默认情况下使用AES 256。您可以覆盖它以使用AES128。AES192仅支持提取。
        //parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
        ZipFile zipFile1 = new ZipFile(zipFile);
        zipFile1.addFile(zipFile1.getFile(), parameters);
        zipFile1.setPassword(password.toCharArray());
        //zipFile1.extractFile();
    }
}
